package com.wcs.exam.controller.admin.resp;

import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.io.Serial;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

/**
 * <p>
 * Admin-考试-查看响应对象
 * </p>
 *
 * @author wcs
 * @since 2025-03-13
 */
@Getter
@Setter
@Accessors(chain = true)
@Schema(description = "Admin-考试-查看响应对象")
public class AdminExamViewResp implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    @Schema(description = "主键ID")
    private Long id;

    @Schema(description = "考试类型(1：模拟考试、2：正式考试)")
    private Integer examType;

    @Schema(description = "考试名称")
    private String examName;

    @Schema(description = "分类ID")
    private Long categoryId;

    @Schema(description = "试卷ID")
    private Long paperId;

    @Schema(description = "考试说明")
    private String description;

    @Schema(description = "模拟考试-有效期类型(1：长期有效、2：有效天数、3：固定周期)")
    private Integer validityDateType;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @Schema(description = "模拟考试-开始时间")
    private LocalDateTime beginTime;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @Schema(description = "模拟考试-结束时间")
    private LocalDateTime endTime;

    @Schema(description = "模拟考试-有效天数")
    private Integer days;

    @Schema(description = "销售价(单位：元，0表示免费)")
    private BigDecimal price;

    @Schema(description = "划线价(单位：元，0表示免费)")
    private BigDecimal linePrice;

    @Schema(description = "作答时长(单位：分钟)")
    private Integer answerTime;

    @Schema(description = "模拟考试-考试次数(单位：次，0表示无限次)")
    private Integer examCount;

    @Schema(description = "及格百分比(取值范围：1~100)")
    private Integer passPercentage;

    @Schema(description = "人脸识别(0：关闭、1：开启)")
    private Boolean faceId;

    @Schema(description = "切屏限制(0：关闭、1：开启)")
    private Boolean switchScreenLimit;

    @Schema(description = "切屏限制次数")
    private Integer switchScreenCount;

    @Schema(description = "切屏判断时间(单位：秒)")
    private Integer switchScreenTime;

    @Schema(description = "评阅方式(1:系统评阅，2:人工评阅)")
    private Integer evaluationMethod;

    @Schema(description = "AI评阅(false：关闭、true：开启)")
    private Boolean aiGrading;

    @Schema(description = "考试成绩设置(1：记录学员最高成绩、2：记录学员最新成绩)")
    private Integer examScoreType;

    @Schema(description = "成绩显示(0：禁止、1：显示)")
    private Boolean resultShow;

    @Schema(description = "成绩展示规则(1：交卷后、2：考试结束后、3：自定义)-只能查看评阅完成的记录")
    private Integer resultShowRule;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @Schema(description = "成绩展示时间")
    private LocalDateTime resultShowTime;

    @Schema(description = "作答内容展示(0：禁止、1：显示)-开启成绩显示才能开启")
    private Boolean answerShow;

    @Schema(description = "作答内容展示规则(1：查看对错和答案解析、2：只看对错)-只能查看评阅完成的记录")
    private Integer answerShowRule;

    @Schema(description = "结果显示名次(0：禁止、1：显示)-开启成绩显示才能开启")
    private Boolean resultShowRank;

    @Schema(description = "排行榜(0：禁止、1：显示)")
    private Boolean rankList;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @Schema(description = "正式考试-报名开始时间")
    private LocalDateTime registrationStartTime;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @Schema(description = "正式考试-报名结束时间")
    private LocalDateTime registrationEndTime;

    @Schema(description = "正式考试-报名人数限制(0表示不限人数)")
    private Integer registrationUserLimitCount;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @Schema(description = "正式考试-考试开始时间")
    private LocalDateTime examStartTime;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @Schema(description = "正式考试-考试结束时间")
    private LocalDateTime examEndTime;

    @Schema(description = "正式考试-允许迟到(0：禁止、1：允许)")
    private Boolean allowableLate;

    @Schema(description = "正式考试-允许迟到时间(单位：分钟)")
    private Integer allowableLateTime;

    @Schema(description = "正式考试-考试开考前人脸识别限制时间(单位：分钟)")
    private Integer faceIdLimitTime;

    @Schema(description = "正式考试-考试开考前人脸识别允许错误次数(单位：次)")
    private Integer faceIdLimitCount;

    @Schema(description = "正式考试-考试开考前人脸识别失败允许考试(0：禁止、1：允许)")
    private Boolean faceIdFailureEnter;

    @Schema(description = "正式考试-考试开考前人脸识别失败允许申诉(0：禁止、1：允许)")
    private Boolean faceIdFailureAppeal;

    @Schema(description = "人脸抓拍(0：关闭、1：开启)")
    private Boolean faceCapture;

    @Schema(description = "人脸抓拍时间(单位：分钟)")
    private Integer faceCaptureTime;

    @Schema(description = "人脸抓拍检测(与开考前人脸识别结果进行对比)")
    private Boolean faceCaptureDetection;

    @Schema(description = "人脸抓拍高灵敏度检测(在考试过程中，以固定频率（例如3秒/次）监测学员摄像头中是否存在人脸或多张人脸)")
    private Boolean faceCaptureHighDetection;

    @Schema(description = "人脸抓拍检测错误限制次数")
    private Integer faceCaptureFailureCount;

    @Schema(description = "正式考试-开考前通知")
    private Boolean noticeBefore;

    @Schema(description = "正式考试-成绩公布通知")
    private Boolean noticePublishedScore;

    @Schema(description = "学习统计")
    private Integer countStudy;

    @Schema(description = "虚拟学习人数(页面显示的人数=学习人数+虚拟人数)")
    private Integer countVirtualStudy;

    @Schema(description = "购买统计")
    private Integer countBuy;

    @Schema(description = "虚拟购买人数(页面显示的人数=购买人数+虚拟人数)")
    private Integer countVirtualBuy;

    @Schema(description = "发布状态(0：未发布，1：已发布)")
    private Integer publishStatus;

    @Schema(description = "状态")
    private Integer status;

    @Schema(description = "排序")
    private Integer sort;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @Schema(description = "创建时间")
    private LocalDateTime gmtCreate;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @Schema(description = "修改时间")
    private LocalDateTime gmtModified;

    /*----------------------------------- 拓展信息 -----------------------------------*/

    @Schema(description = "分类名称")
    private String categoryName;

    @Schema(description = "试卷名称")
    private String paperName;
}
